package org.example.util;

import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Function;
import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction;
import java.util.stream.Collectors;


public class RandomUtil {


    /**
     * 返回一个 从 min 到 max 不包含 max 的 数
     * eg:[3,5)  --> 3,4
     * eg:[-9,9) --> -9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8
     */
    public static int getRandom(int min, int max) {
        if (min == max) {
            return max;
        }
        int abs = Math.abs(max - min);
        min = Math.min(min, max);
        float next = ThreadLocalRandom.current().nextFloat();
        return min + Float.valueOf(abs * next).intValue();
    }


    /**
     * 随机从 指定大小中 选取 指定个数
     *
     * @param max 最大个数
     * @param top 需要获取的数量
     * @return 随机之后的数组
     */
    public static List<Integer> getRandomTop(int max, int top) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < max; i++) {
            list.add(i);
        }
        Collections.shuffle(list, ThreadLocalRandom.current());
        if (top >= max) {
            return list;
        }
        return list.subList(0, top);
    }



}
